package model

import (
	"errors"
	"go-vue/admin/conf"
)

type SystemConfig struct {
	Id              int64  `xorm:"autoincr id"`
	ConfigTab       string `xorm:"config_tab"`
	ConfigTabName   string `xorm:"config_tab_name"`
	ConfigTabType   string `xorm:"config_tab_type"`
	ConfigValueType string `xorm:"config_value_type"`
	ConfigKey       string `xorm:"config_key"`
	ConfigKeyName   string `xorm:"config_key_name"`
	ConfigValue     string `xorm:"config_value"`
	ConfigTips      string `xorm:"config_tips"`
}

type SystemInfo struct {
	Id              int64  `json:"id"`
	ConfigValueType string `json:"config_value_type"`
	ConfigKey       string `json:"config_key"`
	ConfigKeyName   string `json:"config_key_name"`
	ConfigValue     string `json:"config_value"`
	ConfigTips      string `json:"config_tips"`
}
type SystemInfoList struct {
	ConfigTab     string        `json:"config_tab"`
	ConfigTabName string        `json:"config_tab_name"`
	ConfigTabType string        `json:"config_tab_type"`
	List          []*SystemInfo `json:"list"`
}

func (config *SystemConfig) One() *SystemConfig {
	exist, err := conf.DbEngine.Get(config)
	if err != nil || exist == false {
		return nil
	}
	return config
}

// GetAllConfig 获取所有配置
func (config *SystemConfig) GetAllConfig() []SystemConfig {
	list := make([]SystemConfig, 0)

	err := conf.DbEngine.OrderBy("config_tab").Find(&list)
	if err != nil {
		return nil
	}

	return list
}

// GetAllEditConfig 编辑用
func (config *SystemConfig) GetAllEditConfig() map[string]*SystemInfoList {
	list := config.GetAllConfig()
	if len(list) == 0 {
		return nil
	}
	var result = make(map[string]*SystemInfoList)

	for _, item := range list {
		//tab 已经处理过
		if result[item.ConfigTab] == nil {
			result[item.ConfigTab] = &SystemInfoList{
				ConfigTab:     item.ConfigTab,
				ConfigTabName: item.ConfigTabName,
				ConfigTabType: item.ConfigTabType,
			}
		}
		tmp := &SystemInfo{
			Id:              item.Id,
			ConfigValueType: item.ConfigValueType,
			ConfigKey:       item.ConfigKey,
			ConfigKeyName:   item.ConfigKeyName,
			ConfigValue:     item.ConfigValue,
			ConfigTips:      item.ConfigTips,
		}
		result[item.ConfigTab].List = append(result[item.ConfigTab].List, tmp)
	}
	return result

}

// SaveEditConfig 编辑配置信息
func (config *SystemConfig) SaveEditConfig(input *SystemInfoList) error {
	if len(input.List) == 0 {
		return errors.New("无数据")
	}
	for _, info := range input.List {
		tmp := &SystemConfig{
			ConfigTab:       input.ConfigTab,
			ConfigTabName:   input.ConfigTabName,
			ConfigTabType:   input.ConfigTabType,
			ConfigValueType: info.ConfigValueType,
			ConfigKey:       info.ConfigKey,
			ConfigKeyName:   info.ConfigKeyName,
			ConfigValue:     info.ConfigValue,
			ConfigTips:      info.ConfigTips,
		}

		_, err := conf.DbEngine.Where("id = ?", info.Id).Update(tmp)
		if err != nil {
			return err
		}
	}
	return nil
}
